//final class Animal{}//证明这个类 不能被继承了
//密封类
class Animal {
    public String name;
    public int age;
    //public final int size = 1;//成员变量加final需要初始值

    static {
        System.out.println("Animal static{}");
    }

    {
        System.out.println("Animal{实例代码块}");
    }

    public Animal() {
        System.out.println("Animal不带参数的构造方法");
    }

    public Animal(String name, int age) {//构造方法
        this.name = name;
        this.age = age;
        System.out.println("带有两个参数的构造方法");
    }
    //在继承关系上，当我们在构造子类的时候，一定要帮助父类进行构造

    public void eat() {
        System.out.println(name + "正在吃饭");
    }
}
/*class Bird extends Animal {
    public Bird() {
        super();
    }
}*/
//   子类          父类
//   派生类        基类/超类
class Dog extends Animal {

    static {//静态先执行   考选择
        System.out.println("Dog static{}");
    }

    {
        System.out.println("Dog{实例代码块}");
    }

    public Dog() {
        //super("123",10);//只能在子类的构造方法类才能调用
        System.out.println("Dog不带参数代码块");
    }

    public Dog(String name,int age) {
        super();//默认
        //super(name,age);//帮你继承过来的属性进行初始化，并没有构造一个父类对象
        /*name = "fff";
        age = 10;*///不能
        //super("七月",10);默认//显示的调用父类的构造方法
    }

    public void wangwang() {
        System.out.println(name + "汪汪叫");
        //private被继承了 只不过不能访问
    }
}
class Cat extends Animal {
    //不同类继承同一个类

    public Cat() {
        super();//编译器默认加上
    }

    public int size;

    public Cat(String name,int age,int size) {
        super(name,age);//先初始化父类 在初始化自己
        this.size = size;
    }
    /*public Cat(String name,int age) {
        super(name,age);//先初始化父类 在初始化自己
        this("1",2,3);//不能同时出现
    }*/

    public void mew() {
        System.out.println(name + "正在喵喵叫");
    }
}
public class Test {

    public static void main(String[] args) {
        final int A = 10;//此时a叫做常量（变量名大写） 不能修改
        //a = 100;
        System.out.println(A);
    }

    public static void main2(String[] args) {
        Dog dog = new Dog();
        System.out.println("=====");
        Dog dog2 = new Dog();
    }

    public static void main1(String[] args) {
        Dog dog = new Dog();
        dog.name = "坦克";
        dog.wangwang();
        dog.eat();
        System.out.println("=======");
        Cat cat = new Cat();
        cat.name = "mimi";
        cat.mew();
        cat.eat();
    }
}
